package com.lyf.scm.admin.domain.remote.item;


import com.github.pagehelper.PageInfo;
import com.lyf.scm.admin.domain.remote.item.dto.*;
import com.lyf.scm.admin.domain.remote.item.dto.SkuInfoDTO;
import com.rome.arch.core.clientobject.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * description:
 * 商品中心远程调用
 *
 * @author: haodong
 * @data: 2020/7/18 14:07
 */
@FeignClient(name = "item-core")
public interface ItemCoreRemote {
    /**
     * 根据后台类目父id查询下级节点（查询后台树-鲲鹏）
     *
     * @param parentId 父id
     * @return {@link Response<List<CategoryBaseInfoDTO>>}
     */
    @GetMapping("/api/v1/item/category/kp/getLowerLevelCategoryByParentId/{parentId}")
    Response<List<CategoryBaseInfoDTO>> getLowerLevelCategoryByParentId(@PathVariable("parentId") Long parentId);

    /**
     * 单个根据类目ID查询SKU数据
     *
     * @param categoryId 类别id
     * @param pageNum    页面num
     * @param pageSize   页面大小
     * @return {@link Response<List<CategoryBaseInfoDTO>>}
     */
    @GetMapping("/api/v1/item/category/kp/skuListByCategoryId/{categoryId}/{pageNum}/{pageSize}")
    Response<PageInfo<SkuInfoDTO>> skuListByCategoryId(@PathVariable("categoryId") Long categoryId,
                                                       @PathVariable("pageNum") Integer pageNum, @PathVariable("pageSize") Integer pageSize);

    /**
     * 根据品类的code查询后台类目信息(包括下一级类目的信息)
     *
     * @param stringList 字符串列表
     * @return {@link Response<List<CategoryBaseInfoDTO>>}
     */
    @PostMapping("/api/v1/item/external/categoryListByCategoryCodes")
    Response<List<CategoryBaseInfoDTO>> categoryListByCategoryCodes(@RequestBody List<String> stringList);

    /**
     * 根据类目层级查询类目信息
     *
     * @param level 水平
     * @return {@link Response<List<CategoryBaseInfoDTO>>}
     */
    @PostMapping("/api/v1/item/category/kp/getCategoryListByLevel")
    Response<List<CategoryBaseInfoDTO>> getCategoryListByLevel(@RequestParam("level") Integer level);

    /**
     * 根据类目编码集合查询类目信息
     *
     * @param secCategoryList
     * @return
     */
    @PostMapping("/api/v1/item/category/kp/selectCategoryInfoByCodes")
    Response<List<CategoryBaseInfoDTO>> listPriCategoryCode(@RequestBody List<String> secCategoryList);

    /**
     * 根据商品code集合获取对应品类id集合
     *
     * @param pageNum
     * @param pageSize
     * @param skuCodes
     * @return
     */
    @PostMapping("api/v1/item/sku/external/skuCodesAndSkuName")
    Response<PageInfo<SkuInfoDTO>> getAllCategoryIdBySkuCode(@RequestParam("pageNum") Integer pageNum,
                                                             @RequestParam("pageSize") Integer pageSize,
                                                             @RequestBody List<String> skuCodes);


    /**
     * 根据品类id集合获取对应品类信息集合
     *
     * @param ids
     * @return
     */
    @PostMapping("/api/v1/item/category/kp/selectCategoryByIds")
    Response<List<CategorySimpleDTO>> getAllCategoryByCategoryId(@RequestBody List<Integer> ids);

    /**
     * 批量通过skuCode和单位名称查询基础单位换算关系
     *
     * @param params
     * @param pageNum
     * @return
     */
    @PostMapping("api/v1/item/external/unitsBySkuCodeAndUnitNameAndMerchantId")
    Response<PageInfo<SkuInfoDTO>> getUtilInfoBySkuCode(@RequestBody List<UnitCodeExtParamDTO> params, @RequestParam("pageNum") Integer pageNum);

    /**
     * 批量通过skuCodes与skuUintType查询sku单位信息
     *
     * @param skuCodes
     * @param skuUintType
     * @return
     */
    @PostMapping("api/v1/item/external/skuUnitBySkuCodesAndSkuUintType")
    Response<List<SkuUnitExtDTO>> getSkuUnitByCodeAndType(@RequestBody List<String> skuCodes, @RequestParam("skuUintType") Integer skuUintType);

    /**
     * 批量通过merchantId,categoryCodes集合查询Sku列表(最多返回500条/次)，默认商家10000
     *
     * @param categoryCode 类别代码
     * @param pageNum      页面num
     * @param pageSize     页面大小
     * @return {@link Response<PageInfo<SkuInfoDTO>>}
     */
    @PostMapping("/api/v1/item/external/skusByCategoryCode")
    Response<PageInfo<SkuInfoDTO>> skusByCategoryCode(@RequestBody List<Long> categoryCode,
                                                      @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
                                                      @RequestParam(value = "pageSize", defaultValue = "500") Integer pageSize);

    /**
     * 根据门店编码查询有进货权限的商品
     *
     * @param storeCodes
     * @param pageNum
     * @param pageSize
     * @return
     */
    @PostMapping("/api/v1/item/external/purchaseAccessSkusByStoreCode")
    Response<PageInfo<SkuPurchaseAccessDTO>> purchaseAccessSkusByStoreCode(@RequestBody List<String> storeCodes,
                                                                           @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
                                                                           @RequestParam(value = "pageSize", defaultValue = "500") Integer pageSize);


    /**
     * 批量通过categoryId集合查询Sku列表(最多返回500条/次)
     *
     * @param pageNum
     * @param categoryId
     * @return {@link Response<PageInfo<SkuInfoDTO>>}
     **/
    @GetMapping("/api/v1/item/external/skusByCategoryId")
    Response<PageInfo<SkuInfoDTO>> skusByCategoryId(@RequestParam("pageNum") Integer pageNum, @RequestBody List<Integer> categoryId);
}
